A namespace is a collection of names that each uniquely identifies an object. For example, the pathnames of a conventional file system uniquely identify the files of the file system and are thus a namespace for the file system. Namespaces, however, can contain the names of a wide variety of objects including files, computer input and output devices, users, and so on. A namespace service typically provides various functions through which applications and users can access the information of the namespace. For example, a namespace may provide a function to retrieve a reference to an object having a specified name. When the function is invoked, it accesses various data structures to locate the object and return its reference.
The difficulty with namespaces is that they typically have predefined attributes associated with their objects. As such, applications and application developers are constrained by the attributes defined by the namespace developers. In addition, namespaces typically provide a logical view of their objects that corresponds to the physical organization of the namespace. For example, if the namespace is hierarchically organized, then the only view of that namespace reflects that same hierarchical organization. It would be desirable to have a namespace service that would allow for more flexible handling of attributes and would allow for more flexible views into the namespace.